package cn.iocoder.yudao.module.ad.api.channel;

import cn.hutool.core.util.ObjectUtil;
import cn.iocoder.yudao.framework.tenant.core.util.TenantUtils;
import cn.iocoder.yudao.module.ad.api.channel.dto.ClueSyncReqDTO;
import cn.iocoder.yudao.module.ad.api.channel.dto.ClueSyncRespDTO;
import cn.iocoder.yudao.module.ad.dal.dataobject.token.AdTokenDO;
import cn.iocoder.yudao.module.ad.dal.mysql.token.AdTokenMapper;
import cn.iocoder.yudao.module.ad.framework.core.channel.AdChannelClient;
import cn.iocoder.yudao.module.ad.framework.core.channel.AdChannelClientFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.Optional;

@Service
@Slf4j
public class AdChannelApiImpl implements AdChannelApi{

    @Resource
    private AdChannelClientFactory adChannelClientFactory;

    @Resource
    private AdTokenMapper adTokenMapper;

    @Override
    public List<ClueSyncRespDTO> getClue(Long tenantId, Long accountId, ClueSyncReqDTO reqDTO) {
        return TenantUtils.execute(tenantId, () -> {
            AdChannelClient client = adChannelClientFactory.getClient(accountId);
            if (Objects.isNull(client)) {
                return Collections.emptyList();
            }
            // 获取token
            AdTokenDO tokenDO = adTokenMapper.selectOne(AdTokenDO::getAccountId, accountId);

            if (Objects.nonNull(tokenDO)) {
                reqDTO.setAccessToken(tokenDO.getAccessToken());
            }

            return client.getClue(reqDTO);
        });
    }
}
